home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Resource for Source: C/C++
/
Resource for Source - C-C++.iso
/
codelib9
/
v_11_02
/
1102086a
< prev
next >
Wrap
Text File
|
1995-11-01
|
11KB
|
316 lines
/***********************************************
*
* file d:\cips\mainseg.c
*
* Functions: This file contains
* main
*
* Purpose:
* This file contains the main calling
* routine in an edge detection program.
*
* External Calls:
* gin.c - get_image_name
* numcvrt.c - get_integer
* int_convert
* tiff.c - read_tiff_header
* enhance_edges
* hist.c - zero_histogram
* smooth_histogram
* show_histogram
* calculate_histogram
* segment.c - threshold_image_array
* grow
* find_peaks
* peaks_high_low
* valley_high_low
* threshold_and_find_means
*
* Modifications:
* 27 September 1992 - created
*
*************************************************/
#include "cips.h"
short the_image[ROWS][COLS];
short out_image[ROWS][COLS];
unsigned long histogram[GRAY_LEVELS+1];
main(argc, argv)
int argc;
char *argv[];
{
char name[80], name2[80], response[80];
int count, i, ie, il, j, k, le, length, ll,
peak1, peak2, size,
t, type, v, width;
short background, hi, low, object, value;
struct tiff_header_struct image_header;
_setvideomode(_TEXTC80); /* MSC 6.0 statements */
_setbkcolor(1);
_settextcolor(7);
_clearscreen(_GCLEARSCREEN);
if(argc < 7){
printf("\n\nmainseg in-file out-file hi low value operation");
printf("\n\t\toperation = threshold grow peaks valleys adaptive");
printf("\n");
exit(0);
}
strcpy(name, argv[1]);
strcpy(name2, argv[2]);
hi = atoi(argv[3]);
low = atoi(argv[4]);
value = atoi(argv[5]);
il = 1;
ie = 1;
ll = ROWS+1;
le = COLS+1;
read_tiff_header(name, &image_header);
length = (90 + image_header.image_length)/ROWS;
width = (90 +image_header.image_width)/COLS;
count = 1;
printf("\nlength=%d width=%d", length, width);
if(does_not_exist(name2)){
read_tiff_header(name, &image_header);
round_off_image_size(&image_header,
&length, &width);
image_header.image_length = length*ROWS;
image_header.image_width = width*COLS;
create_allocate_tiff_file(name2, &image_header,
out_image);
} /* ends if does_not_exist */
zero_histogram(histogram);
/*********************************
*
* Manual Threshold operation
*
*********************************/
if(argv[6][0] == 't'){
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
printf("\nMS> Calling threshold");
threshold_image_array(the_image, out_image,
hi, low, value);
write_array_into_tiff_image(name2, out_image,
il+i*ROWS,
ie+j*COLS,
ll+i*ROWS,
le+j*COLS);
} /* ends loop over i */
} /* ends loop over j */
} /* ends if t */
/*********************************
*
* Grow region operation
*
*********************************/
if(argv[6][0] == 'g'){
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
printf("\nMS> Calling grow");
grow(the_image, value);
write_array_into_tiff_image(name2, the_image,
il+i*ROWS,
ie+j*COLS,
ll+i*ROWS,
le+j*COLS);
} /* ends loop over i */
} /* ends loop over j */
} /* ends if g */
/*********************************
*
* Peak threshold operation
*
*********************************/
if(argv[6][0] == 'p'){
/* calculate histogram for the
entire image file */
zero_histogram(histogram);
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
printf("\nMS> Calling hist functions");
calculate_histogram(the_image, histogram);
} /* ends loop over i */
} /* ends loop over j */
smooth_histogram(histogram);
show_histogram(histogram);
find_peaks(histogram, &peak1, &peak2);
printf("\npeak1=%d peak2=%d", peak1, peak2);
peaks_high_low(histogram, peak1, peak2,
&hi, &low);
printf("\nhi=%d low=%d", hi, low);
/* now read the image file again
and threshold and grow objects. */
count = 1;
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
threshold_image_array(the_image, out_image,
hi, low, value);
write_array_into_tiff_image(name2, out_image,
il+i*ROWS,
ie+j*COLS,
ll+i*ROWS,
le+j*COLS);
} /* ends loop over i */
} /* ends loop over j */
} /* ends if p */
/*********************************
*
* Valley threshold operation
*
*********************************/
if(argv[6][0] == 'v'){
/* calculate histogram for the
entire image file */
zero_histogram(histogram);
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
printf("\nMS> Calling hist functions");
calculate_histogram(the_image, histogram);
} /* ends loop over i */
} /* ends loop over j */
smooth_histogram(histogram);
show_histogram(histogram);
find_peaks(histogram, &peak1, &peak2);
printf("\npeak1=%d peak2=%d", peak1, peak2);
valley_high_low(histogram, peak1, peak2,
&hi, &low);
printf("\nhi=%d low=%d", hi, low);
/* now read the image file again
and threshold and grow objects. */
count = 1;
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
threshold_image_array(the_image, out_image,
hi, low, value);
write_array_into_tiff_image(name2, out_image,
il+i*ROWS,
ie+j*COLS,
ll+i*ROWS,
le+j*COLS);
} /* ends loop over i */
} /* ends loop over j */
} /* ends if v */
/*********************************
*
* Adaptive threshold operation
*
*********************************/
if(argv[6][0] == 'a'){
/* calculate histogram for the
entire image file */
zero_histogram(histogram);
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
printf("\nMS> Calling hist functions");
calculate_histogram(the_image, histogram);
} /* ends loop over i */
} /* ends loop over j */
/* find the peaks for the entire
image file. */
smooth_histogram(histogram);
show_histogram(histogram);
find_peaks(histogram, &peak1, &peak2);
printf("\npeak1=%d peak2=%d", peak1, peak2);
peaks_high_low(histogram, peak1, peak2,
&hi, &low);
printf("\nhi=%d low=%d", hi, low);
/* Second Pass */
count = 1;
for(i=0; i<length; i++){
for(j=0; j<width; j++){
printf("\nrunning %d of %d", count, length*width);
count++;
read_tiff_image(name, the_image,
il+i*ROWS, ie+j*COLS,
ll+i*ROWS, le+j*COLS);
threshold_and_find_means(the_image,
out_image, hi, low,
value, &object,
&background);
peaks_high_low(histogram, object, background,
&hi, &low);
printf("\nafter means calculated - hi=%d low=%d", hi, low);
threshold_image_array(the_image, out_image,
hi, low, value);
write_array_into_tiff_image(name2, out_image,
il+i*ROWS,
ie+j*COLS,
ll+i*ROWS,
le+j*COLS);
} /* ends loop over i */
} /* ends loop over j */
} /* ends if a */
} /* ends main */